package it.sisisoftware.jogmobile;

import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ListActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class ViewNominativi extends ListActivity {

	// JSON Node names
	private static final String TAG_CONTACTS = "nominativi";
	private static final String TAG_CODICE = "Codice";
	private static final String TAG_NOME = "Nome";

	private String url = "";

	// contacts JSONArray
	JSONArray contacts = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		
		// getting intent data
		Intent in = getIntent();

		// Get JSON values from previous intent
		String filtro = in.getStringExtra("NOME_DA_CERCARE");
		
		String filtroSeEstratto = in.getStringExtra("ESTRATTO_CONTO_SINGOLO");
		
		
		
		
		SharedPreferences pref =
            PreferenceManager.getDefaultSharedPreferences(
            		getApplicationContext());
		
		url = getString(R.string.url);
		
		String ut = pref.getString("utente", "jogdemo.admin");
		String pa = pref.getString("password", "admin");
		
		ut = (ut==""?"jogdemo.admin":ut);
		pa = (pa==""?"admin":pa);
		
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.list_generale);

		// Hashmap for ListView
		ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();

		// Creating JSON Parser instance
		JSONParser jParser = new JSONParser();
		
		
		// getting JSON string from URL
		String utente= ut;		
		String password = pa;
		
		String operazione = "CLIENTI";
		
		Bundle bundle = this.getIntent().getExtras();
		String parametro = bundle.getString("OPERAZIONE");
		if (parametro!=null  && !parametro.equals("") ){
			operazione = parametro;
		}
		if (filtro == null || filtro == "") {
		filtro = "NULL";
		}
		String filtrounico = "NULL";
		final String opFinal = operazione;

		try {		
			utente = General.padAndCrypt(utente);
			password = General.padAndCrypt(password);
			operazione = General.padAndCrypt(operazione);
			filtro = General.padAndCrypt(filtro);
			filtrounico = General.padAndCrypt(filtrounico);
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		//System.out.println(url+"?paramuno="+utente+"&paramdue="+password+"&paramtre="+operazione+"&paramquattro="+filtro+"&paramcinque="+filtrounico);
		
		JSONObject json = jParser.getJSONFromUrl(url, utente, password, operazione, filtro, filtrounico);

		try {
			// Getting Array of Contacts
			if (json==null){
    			Toast.makeText(getApplicationContext(),"Errore - Controllare utente e password",
  			          Toast.LENGTH_SHORT).show();
    			
    			//TORNA al main principale, ma crea una nuova attivity per ogni chiamata e quindi per tornare con il tasto indietro
    			//alla principale dovremo cliccare tante volte... 
    			/*
    		 	  Intent intent = new Intent(ViewJSON.this, JogM.class);
    		 	  startActivity(intent);
    		 	  */
    			
    			
    			// TORNA al main principale, senza creare una nuova activity e facendola diventare il TOP delle attivity
    			/*
					Intent intent =new Intent(ViewJSON.this, JogM.class);
					intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP );
					startActivity(intent);
    			 */
    			finish(); // torna da dove l'abbiamo chiamato, attivity precedente.
    			return;
			}
			
			contacts = json.getJSONArray(TAG_CONTACTS);

			
			if (contacts.length() == 1 && (filtroSeEstratto!=null && filtroSeEstratto.equals("1"))) {
				
				JSONObject c = contacts.getJSONObject(0);
				String codice = c.getString(TAG_CODICE);
				String name = c.getString(TAG_NOME).trim();
				
				in = new Intent(getApplicationContext(),
						ViewEC.class);
				
				bundle = new Bundle();
				bundle.putString("CODNOM", codice);
				bundle.putString("DESNOM", name);
				in.putExtras(bundle);
				
				startActivity(in);
				
				return;
				
			}
		
			if (contacts.length() == 1 && filtroSeEstratto==null) {
				
				JSONObject c = contacts.getJSONObject(0);
				String codice = c.getString(TAG_CODICE);
				String name = c.getString(TAG_NOME).trim();
				
				
				
				
				in = new Intent(getApplicationContext(),
						SingoloNominativo.class);
				
				
				bundle = new Bundle();
				bundle.putString("OPERAZIONE", opFinal );
				in.putExtras(bundle);
				
				in.putExtra(TAG_CODICE, codice);
				in.putExtra(TAG_NOME, name);
				startActivity(in);
				
				return;
				
				
			}
			
			
			// looping through All Contacts
			for (int i = 0; i < contacts.length(); i++) {
				JSONObject c = contacts.getJSONObject(i);

				// Storing each json item in variable
				String codice = c.getString(TAG_CODICE);
				String name = c.getString(TAG_NOME).trim();

				// creating new HashMap
				HashMap<String, String> map = new HashMap<String, String>();

				// adding each child node to HashMap key => value
				map.put(TAG_CODICE, codice);
				map.put(TAG_NOME, name);

				// adding HashList to ArrayList
				contactList.add(map);
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}

		/**
		 * Updating parsed JSON data into ListView
		 * */
		ListAdapter adapter = new SimpleAdapter(this, contactList,
				R.layout.list_nominativi, new String[] { TAG_NOME}, new int[] { R.id.nome });

		setListAdapter(adapter);
		
		final ArrayList<HashMap<String, String>> contatti = contactList;
		

		// selecting single ListView item
		ListView lv = getListView();
		
		
		
		// Launching new screen on Selecting Single ListItem 
		lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// getting values from selected ListItem
				String nome = ((TextView) view.findViewById(R.id.nome))
						.getText().toString();
				
				HashMap<String, String> nominativo = contatti.get(position); 
				String codice = nominativo.get(TAG_CODICE);

				// Starting new intent
				
					
					Intent in = new Intent(getApplicationContext(),
							SingoloNominativo.class);
					
					Bundle bundle = new Bundle();
					bundle.putString("OPERAZIONE", opFinal );
					in.putExtras(bundle);
					
					in.putExtra(TAG_CODICE, codice);
					in.putExtra(TAG_NOME, nome);
					startActivity(in);
					
				
				
				
			}
		});
	}

}
